package com.liuwei.spring.cloud.junit.leetcode.expire;

import java.util.LinkedHashMap;
import java.util.Map;

public class LRU {

    /**
     * https://www.bilibili.com/read/cv7580021/
     * 1. HashMap 提供的访问，是无序的。而在一些业务场景下，我们希望能够提供有序访问的 HashMap 。那么此时，我们就有两种选择：
     * (1) TreeMap ：按照 key 进行排序。
     * (2) LinkedHashMap ：按照 key 的插入和访问的顺序。
     *
     * 2. LinkedHashMap ，在 HashMap 的基础之上，提供了顺序访问的特性。而这里的顺序，包括两种：
     * (1) 当 accessOrder = false 【默认】 按照 key-value 的插入顺序进行访问。
     * (2) 当 accessOrder = true 时按照 key-value 的访问顺序进行访问, 最近访问的元素将排在迭代顺序的末尾。
     */
    public static void main(String[] args) {
        LinkedHashMap<String,String> cache = new LinkedHashMap<>(16,0.75f,true);
        cache.put("a","a");
        cache.put("b","b");
        cache.put("d","d");
        for (Map.Entry<String, String> entry : cache.entrySet()) {
            System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
        }
        System.out.println(cache.get("b"));
        for (Map.Entry<String, String> entry : cache.entrySet()) {
            System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
        }
        cache.put("c","c");
        for (Map.Entry<String, String> entry : cache.entrySet()) {
            System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
        }
    }
}
